'use strict'

const getOpenID = require('../../lib/getOpenID')
const tok = require('../../lib/tok')

class mplogin {

  constructor() {
    //param默认就是/:id，若要改变路由，则可以设置此属性，比如设置为/:name
    //this.param = '/:id'
    this.param = '/:code'
  }

  /**
   * 获取资源具体内容
   * @param {context} c
   * @returns 
   */
  async get(ctx) {
      //路由参数 code 放在ctx.param中
      let tk = await getOpenID(ctx.param.code)
      if (!tk.ok) {
        return ctx.status(400).send('请求遇到网络错误')
      }
      //把返回值转成object
      let info = tk.json()

      //获取失败，返回400状态码，并返回错误信息
      if (!info.openid || info.errcode) {
        return ctx.status(400).send(info.errmsg)
      }

      //return ctx.send(info)
      //加密处理返回token值
      let data = {
        //每次登录都有一个随机值，保证生成的token不一致
        rand: Math.random(),
        openid: info.openid,
      }

      ctx.send({
        token: tok.makeAccessToken(data),
        expires: tok.expires
      })
  }
}

module.exports = mplogin
